package com.bms.controller.xybank;


import com.bms.common.request.BudgutReq;
import com.bms.common.response.Result;
import com.bms.entity.Budget;
import com.bms.entity.Category;
import com.bms.service.BudgetService;
import com.bms.utils.MyResult;
import com.bms.utils.MyUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 条线额度控制层
 */
@RestController
@RequestMapping("/budget")
public class BudgetController {

    @Autowired
    private BudgetService budgetService;

    /**
     * 获取预算总数
     *
     * @return 返回包含预算总数的Result对象
     */
    @GetMapping(value = "/getCount")
    public Result getCount(){
        Integer count = budgetService.getCount();
        return Result.success(count);
    }

    /**
     * 添加新预算
     *
     * @param budget 新预算对象，通过请求体传递
     * @return 返回添加结果的Result对象
     */
    @PostMapping("/addBudget")
    public Result addBudget(@RequestBody Budget budget) {
        Integer i = budgetService.addBudget(budget);
        if (i==0) {
            return Result.error("当前年度已经有额度条线，请勿重复添加");
        }
        return Result.success();
    }

    /**
     * 分页查询预算
     *
     * @param params 查询参数，包含分页信息
     * @return 返回包含查询结果和分页信息的Map对象
     */
    @GetMapping(value = {"/queryBudgetsByPage", "reader/queryBudgetsByPage"})
    public Map<String, Object> queryBudgetsByPage(@RequestParam Map<String, Object> params){
        MyUtils.parsePageParams(params);
        int count = budgetService.getSearchCount(params);
        List<Budget> budgetList = budgetService.searchBudgetsByPage(params);
        return MyResult.getListResultMap(0, "success", count, budgetList);
    }

    /**
     * 更新预算信息
     *
     * @param budget 更新的预算对象，通过请求体传递
     * @return 返回更新结果的Result对象
     */
    @PutMapping(value = "/updateBudget")
    public Result updateBudget(@RequestBody Budget budget){
        Integer count = budgetService.updateBudget(budget);
        return Result.success(count);
    }

    /**
     * 更新预算状态
     *
     * @param budget 包含更新状态的预算对象，通过请求体传递
     * @return 返回状态更新结果的Result对象
     */
    @PutMapping(value = "/updateStatus")
    public Result updateStatus(@RequestBody Budget budget){
        Integer res = budgetService.updateStatus(budget);
        return Result.success(res);
    }

    /**
     * 更新预算信息（清零）
     * 此接口用于更新特定预算记录的信息，特别是针对QL类型的更新
     * @param budget 包含更新信息的预算对象
     * @return 返回更新操作影响的记录数
     */
    @PutMapping(value = "/updateQL")
    public Result updateQL(@RequestBody Budget budget){
        Integer count = budgetService.updateQL(budget);
        return Result.success(count);
    }

    /**
     * 更新预算信息（结转）
     * 此接口用于更新特定预算记录的信息，特别是针对JZ类型的更新
     * @param budget 包含更新信息的预算请求对象
     * @return 返回更新操作影响的记录数
     */
    @PutMapping(value = "/updateJZ")
    public Result updateJZ(@RequestBody BudgutReq budget){
        Integer count = budgetService.updateJZ(budget);
        return Result.success(count);
    }

    /**
     * 查询所有可用的条线额度列表
     * @return 条线额度列表
     */
    @GetMapping(value = "/getBudgetSelectList")
    public Result getBudgetSelectList(){
        return Result.success(budgetService.getBudgetSelectList());
    }
}

